import store from '..'
import { getStudentCourseTable, getTeacherCourseTable } from '@/api/bussiness/course/mineCourse'

// const d = {
//   data: { // 原始课表数据
//     teachTimes: {
//       weekList: [
//         {
//           wid: 0,
//           name: '星期日'
//         },
//         {
//           wid: 1,
//           name: '星期一'
//         },
//         {
//           wid: 2,
//           name: '星期二'
//         },
//         {
//           wid: 3,
//           name: '星期三'
//         },
//         {
//           wid: 4,
//           name: '星期四'
//         },
//         {
//           wid: 5,
//           name: '星期五'
//         },
//         {
//           wid: 6,
//           name: '星期六'
//         }
//       ],
//       orderList: [
//         {
//           oid: 1,
//           name: '第1-2节',
//           startTime: '08:00',
//           endTime: '09:40'
//         },
//         {
//           oid: 2,
//           name: '第3-4节',
//           startTime: '10:00',
//           endTime: '11:40'
//         },
//         {
//           oid: 3,
//           name: '第6-7节',
//           startTime: '13:30',
//           endTime: '15:10'
//         },
//         {
//           oid: 4,
//           name: '第8-9节',
//           startTime: '15:20',
//           endTime: '17:00'
//         },
//         {
//           oid: 5,
//           name: '第10-11节',
//           startTime: '18:30',
//           endTime: '20:10'
//         }
//       ],
//       teachTimeList: [
//         {
//           id: 2,
//           dayOfWeek: 1,
//           dayOfWeekShow: '星期一',
//           timeOrder: 1,
//           timeOrderShow: '第1-2节',
//           timeName: '周一第1-2节',
//           startTime: '08:00:00',
//           endTime: '09:40:00',
//           quality: 4.3
//         },
//         {
//           id: 3,
//           dayOfWeek: 1,
//           dayOfWeekShow: '星期一',
//           timeOrder: 2,
//           timeOrderShow: '第3-4节',
//           timeName: '周一第3-4节',
//           startTime: '10:00:00',
//           endTime: '11:40:00',
//           quality: 4.3
//         },
//         {
//           id: 4,
//           dayOfWeek: 1,
//           dayOfWeekShow: '星期一',
//           timeOrder: 3,
//           timeOrderShow: '第6-7节',
//           timeName: '周一第6-7节',
//           startTime: '13:30:00',
//           endTime: '15:10:00',
//           quality: 4.2
//         },
//         {
//           id: 5,
//           dayOfWeek: 1,
//           dayOfWeekShow: '星期一',
//           timeOrder: 4,
//           timeOrderShow: '第8-9节',
//           timeName: '周一第8-9节',
//           startTime: '15:20:00',
//           endTime: '17:00:00',
//           quality: 4.1
//         },
//         {
//           id: 6,
//           dayOfWeek: 1,
//           dayOfWeekShow: '星期一',
//           timeOrder: 5,
//           timeOrderShow: '第10-11节',
//           timeName: '周一第10-11节',
//           startTime: '18:30:00',
//           endTime: '20:10:00',
//           quality: 4.1
//         },
//         {
//           id: 7,
//           dayOfWeek: 2,
//           dayOfWeekShow: '星期二',
//           timeOrder: 1,
//           timeOrderShow: '第1-2节',
//           timeName: '周二第1-2节',
//           startTime: '08:00:00',
//           endTime: '09:40:00',
//           quality: 4.3
//         },
//         {
//           id: 8,
//           dayOfWeek: 2,
//           dayOfWeekShow: '星期二',
//           timeOrder: 2,
//           timeOrderShow: '第3-4节',
//           timeName: '周二第3-4节',
//           startTime: '10:00:00',
//           endTime: '11:40:00',
//           quality: 4.3
//         },
//         {
//           id: 9,
//           dayOfWeek: 2,
//           dayOfWeekShow: '星期二',
//           timeOrder: 3,
//           timeOrderShow: '第6-7节',
//           timeName: '周二第6-7节',
//           startTime: '13:30:00',
//           endTime: '15:10:00',
//           quality: 4.8
//         },
//         {
//           id: 10,
//           dayOfWeek: 2,
//           dayOfWeekShow: '星期二',
//           timeOrder: 4,
//           timeOrderShow: '第8-9节',
//           timeName: '周二第8-9节',
//           startTime: '15:20:00',
//           endTime: '17:00:00',
//           quality: 4.7
//         },
//         {
//           id: 11,
//           dayOfWeek: 2,
//           dayOfWeekShow: '星期二',
//           timeOrder: 5,
//           timeOrderShow: '第10-11节',
//           timeName: '周二第10-11节',
//           startTime: '18:30:00',
//           endTime: '20:10:00',
//           quality: 4.1
//         },
//         {
//           id: 17,
//           dayOfWeek: 3,
//           dayOfWeekShow: '星期三',
//           timeOrder: 1,
//           timeOrderShow: '第1-2节',
//           timeName: '周三第1-2节',
//           startTime: '08:00:00',
//           endTime: '09:40:00',
//           quality: 4.3
//         },
//         {
//           id: 18,
//           dayOfWeek: 3,
//           dayOfWeekShow: '星期三',
//           timeOrder: 2,
//           timeOrderShow: '第3-4节',
//           timeName: '周三第3-4节',
//           startTime: '10:00:00',
//           endTime: '11:40:00',
//           quality: 8.7
//         },
//         {
//           id: 19,
//           dayOfWeek: 3,
//           dayOfWeekShow: '星期三',
//           timeOrder: 3,
//           timeOrderShow: '第6-7节',
//           timeName: '周三第6-7节',
//           startTime: '13:30:00',
//           endTime: '15:10:00',
//           quality: 7.55
//         },
//         {
//           id: 20,
//           dayOfWeek: 3,
//           dayOfWeekShow: '星期三',
//           timeOrder: 4,
//           timeOrderShow: '第8-9节',
//           timeName: '周三第8-9节',
//           startTime: '15:20:00',
//           endTime: '17:00:00',
//           quality: 4.1
//         },
//         {
//           id: 21,
//           dayOfWeek: 3,
//           dayOfWeekShow: '星期三',
//           timeOrder: 5,
//           timeOrderShow: '第10-11节',
//           timeName: '周三第10-11节',
//           startTime: '18:30:00',
//           endTime: '20:10:00',
//           quality: 4.1
//         },
//         {
//           id: 27,
//           dayOfWeek: 4,
//           dayOfWeekShow: '星期四',
//           timeOrder: 1,
//           timeOrderShow: '第1-2节',
//           timeName: '周四第1-2节',
//           startTime: '08:00:00',
//           endTime: '09:40:00',
//           quality: 4.3
//         },
//         {
//           id: 28,
//           dayOfWeek: 4,
//           dayOfWeekShow: '星期四',
//           timeOrder: 2,
//           timeOrderShow: '第3-4节',
//           timeName: '周四第3-4节',
//           startTime: '10:00:00',
//           endTime: '11:40:00',
//           quality: 4.3
//         },
//         {
//           id: 29,
//           dayOfWeek: 4,
//           dayOfWeekShow: '星期四',
//           timeOrder: 3,
//           timeOrderShow: '第6-7节',
//           timeName: '周四第6-7节',
//           startTime: '13:30:00',
//           endTime: '15:10:00',
//           quality: 4.2
//         },
//         {
//           id: 30,
//           dayOfWeek: 4,
//           dayOfWeekShow: '星期四',
//           timeOrder: 4,
//           timeOrderShow: '第8-9节',
//           timeName: '周四第8-9节',
//           startTime: '15:20:00',
//           endTime: '17:00:00',
//           quality: 4.1
//         },
//         {
//           id: 31,
//           dayOfWeek: 4,
//           dayOfWeekShow: '星期四',
//           timeOrder: 5,
//           timeOrderShow: '第10-11节',
//           timeName: '周四第10-11节',
//           startTime: '18:30:00',
//           endTime: '20:10:00',
//           quality: 4.1
//         },
//         {
//           id: 32,
//           dayOfWeek: 5,
//           dayOfWeekShow: '星期五',
//           timeOrder: 1,
//           timeOrderShow: '第1-2节',
//           timeName: '周五第1-2节',
//           startTime: '08:00:00',
//           endTime: '09:40:00',
//           quality: 4.3
//         },
//         {
//           id: 33,
//           dayOfWeek: 5,
//           dayOfWeekShow: '星期五',
//           timeOrder: 2,
//           timeOrderShow: '第3-4节',
//           timeName: '周五第3-4节',
//           startTime: '10:00:00',
//           endTime: '11:40:00',
//           quality: 4.3
//         },
//         {
//           id: 34,
//           dayOfWeek: 5,
//           dayOfWeekShow: '星期五',
//           timeOrder: 3,
//           timeOrderShow: '第6-7节',
//           timeName: '周五第6-7节',
//           startTime: '13:30:00',
//           endTime: '15:10:00',
//           quality: 4.2
//         },
//         {
//           id: 35,
//           dayOfWeek: 5,
//           dayOfWeekShow: '星期五',
//           timeOrder: 4,
//           timeOrderShow: '第8-9节',
//           timeName: '周五第8-9节',
//           startTime: '15:20:00',
//           endTime: '17:00:00',
//           quality: 4.1
//         },
//         {
//           id: 36,
//           dayOfWeek: 5,
//           dayOfWeekShow: '星期五',
//           timeOrder: 5,
//           timeOrderShow: '第10-11节',
//           timeName: '周五第10-11节',
//           startTime: '18:30:00',
//           endTime: '20:10:00',
//           quality: 3.25
//         },
//         {
//           id: 37,
//           dayOfWeek: 6,
//           dayOfWeekShow: '星期六',
//           timeOrder: 1,
//           timeOrderShow: '第1-2节',
//           timeName: '周六第1-2节',
//           startTime: '08:00:00',
//           endTime: '09:40:00',
//           quality: 4.3
//         },
//         {
//           id: 38,
//           dayOfWeek: 6,
//           dayOfWeekShow: '星期六',
//           timeOrder: 2,
//           timeOrderShow: '第3-4节',
//           timeName: '周六第3-4节',
//           startTime: '10:00:00',
//           endTime: '11:40:00',
//           quality: 4.3
//         },
//         {
//           id: 39,
//           dayOfWeek: 6,
//           dayOfWeekShow: '星期六',
//           timeOrder: 3,
//           timeOrderShow: '第6-7节',
//           timeName: '周六第6-7节',
//           startTime: '13:30:00',
//           endTime: '15:10:00',
//           quality: 4.2
//         },
//         {
//           id: 40,
//           dayOfWeek: 6,
//           dayOfWeekShow: '星期六',
//           timeOrder: 4,
//           timeOrderShow: '第8-9节',
//           timeName: '周六第8-9节',
//           startTime: '15:20:00',
//           endTime: '17:00:00',
//           quality: 4.12
//         },
//         {
//           id: 41,
//           dayOfWeek: 6,
//           dayOfWeekShow: '星期六',
//           timeOrder: 5,
//           timeOrderShow: '第10-11节',
//           timeName: '周六第10-11节',
//           startTime: '18:30:00',
//           endTime: '20:10:00',
//           quality: 8.25
//         },
//         {
//           id: 42,
//           dayOfWeek: 0,
//           dayOfWeekShow: '星期日',
//           timeOrder: 1,
//           timeOrderShow: '第1-2节',
//           timeName: '周日第1-2节',
//           startTime: '08:00:00',
//           endTime: '09:40:00',
//           quality: 1.32
//         },
//         {
//           id: 43,
//           dayOfWeek: 0,
//           dayOfWeekShow: '星期日',
//           timeOrder: 2,
//           timeOrderShow: '第3-4节',
//           timeName: '周日第3-4节',
//           startTime: '10:00:00',
//           endTime: '11:40:00',
//           quality: 4.3
//         },
//         {
//           id: 44,
//           dayOfWeek: 0,
//           dayOfWeekShow: '星期日',
//           timeOrder: 3,
//           timeOrderShow: '第6-7节',
//           timeName: '周日第6-7节',
//           startTime: '13:30:00',
//           endTime: '15:10:00',
//           quality: 4.2
//         },
//         {
//           id: 45,
//           dayOfWeek: 0,
//           dayOfWeekShow: '星期日',
//           timeOrder: 4,
//           timeOrderShow: '第8-9节',
//           timeName: '周日第8-9节',
//           startTime: '15:20:00',
//           endTime: '17:00:00',
//           quality: 4.1
//         },
//         {
//           id: 46,
//           dayOfWeek: 0,
//           dayOfWeekShow: '星期日',
//           timeOrder: 5,
//           timeOrderShow: '第10-11节',
//           timeName: '周日第10-11节',
//           startTime: '18:30:00',
//           endTime: '20:10:00',
//           quality: 4.1
//         }
//       ]
//     },
//     courseSchedules: [
//       {
//         id: 2,
//         courseId: 1,
//         courseName: '软件工程',
//         teachClassName: '软件工程02',
//         teachYear: 2022,
//         teachTerm: 2,
//         teachTimeId: 43,
//         teachTimeName: '周日第3-4节',
//         classroomId: 31,
//         classroomName: 'D101',
//         teacherNo: '889248',
//         teacherName: '白涛',
//         expectedPeopleNum: 77
//       },
//       {
//         id: 4,
//         courseId: 4,
//         courseName: 'Java课程设计',
//         teachClassName: 'Java课程设计-大数据01班',
//         teachYear: 2022,
//         teachTerm: 2,
//         teachTimeId: 44,
//         teachTimeName: '周日第6-7节',
//         classroomId: null,
//         classroomName: null,
//         teacherNo: '757291',
//         teacherName: '白娜',
//         expectedPeopleNum: 25
//       },
//       {
//         id: 9,
//         courseId: 9,
//         courseName: '关系型数据库应用',
//         teachClassName: '关系型数据库应用——软工01教学班班',
//         teachYear: 2022,
//         teachTerm: 2,
//         teachTimeId: 13,
//         teachTimeName: null,
//         classroomId: 11,
//         classroomName: 'A101',
//         teacherNo: '825740',
//         teacherName: '王秀英',
//         expectedPeopleNum: 150
//       }
//     ]
//   }
// }

const state = {
  data: null
}

const mutations = {

}

const actions = {
  getCourseTable({ state }) {
    return new Promise((resolve, reject) => {
      try {
        confirmData(state)
        setTimeout(() => {
          // 构建课表列表数据
          const { weekList, orderList, teachTimeList } = state.data.teachTimes
          const csList = state.data.courseSchedules
          const cTable = {
            weekList,
            orderList,
            csList: []
          }
          orderList.forEach(o => {
            const items = []
            weekList.forEach(w => {
              const teachTime = teachTimeList.find(tt => tt.dayOfWeek === w.wid && tt.timeOrder === o.oid)
              const courseSchedule = csList.find(cs => cs.teachTimeId === teachTime.id)
              const csData = courseSchedule || null
              items.push(csData)
            })
            cTable.csList.push(items)
          })
          // 返回数据
          resolve(cTable)
        }, 1000)
      } catch (error) {
        reject(error)
      }
    })
  },
  getTodayCourse({ state }) {
    return new Promise((resolve, reject) => {
      try {
        confirmData(state)
        setTimeout(() => {
          // 构建课表列表数据
          const { orderList, teachTimeList } = state.data.teachTimes
          const csList = state.data.courseSchedules
          const cTable = []
          // 获取当前时间的wid
          const wid = new Date().getDay()
          orderList.forEach(o => {
            const teachTime = teachTimeList.find(tt => tt.dayOfWeek === wid && tt.timeOrder === o.oid)
            const courseSchedule = csList.find(cs => cs.teachTimeId === teachTime.id)
            if (courseSchedule) {
              const csData = {
                oid: o.oid,
                oname: o.name,
                teachTime,
                courseSchedule
              }
              cTable.push(csData)
            }
          })
          // 返回数据
          resolve(cTable)
        }, 1000)
      } catch (error) {
        reject(error)
      }
    })
  }
}

function refreshData(state) {
  store.dispatch('user/getMemInfo').then(({ memberInfo, userType }) => {
    if (userType === 1) {
      getStudentCourseTable(memberInfo).then(({ data }) => {
        state.data = data
      })
    } else {
      getTeacherCourseTable(memberInfo).then(({ data }) => {
        state.data = data
      })
    }
  })
}

async function confirmData(state) {
  if (!state.data) {
    refreshData(state)
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
